博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
10.1 编写用户页面
阅读量:4095 次
发布时间:2019-05-25

本文共 2848 字,大约阅读时间需要 9 分钟。

我们访问不同用户的页面, 显示不同的信息, 但是用户页面的大体架构都是相同的, 这是怎么做到的呢?

其实我们只要编写一个用户页面user.html, 然后返回模板的时候把当前登录的用户current_user作为参数传进模板, 模板就会显示该用户的各个属性, 不同用户的属性不同, 显示的内容也就不尽相同了。

一. 为User表增加属性

#为了使用户资料更丰富一些, 我们为用户增加几个属性:

from flask_login import UserMixinfrom . import dbfrom datetime import datetimeclass User(UserMixin, db.Model):    name = db.Column(db.String(64))  #真实姓名    location = db.Column(db.String(64))  #地址    about_me = db.Column(db.Text())  #自我介绍    member_since = db.Column(db.DateTime(), default=datetime.utcnow)   #注册时间    last_seen = db.Column(db.DateTime(), default=datetime.utcnow)  #上次登录的时间    #注册时间和上次登录时间默认都是注册的时间, 用户注册时, 视图函数创建用户, 然后提交会话到数据库, 此时用户的member_since和last_seen都是注册时的时间, member_since以后不需改动, 而last_seen是上次登录时间, 所以我们每次登录都要更新last_seen的值——具体做法是增加一个改变last_seen的函数, 然后在before_app_request中调用该函数。   def ping(self):          self.last_seen = datetime.utcnow()        db.session.add(self)

二. 修改|-app/-auth/views.py

from . import authfrom flask import requests, redirect, url_for@auth.before_app_request  #在所有请求之前调用该函数def before_request():    if current_user.is_authenticated():  #有用户登录就更新该用户的last_seen属性的值为当前时间        current_user.ping()        if not current_user.confirm\            and requests.endpoint[:5] != 'auth.':                return redirect(url_for('auth.unconfirmed'))

三. 修改|-app/-main/views.py

from . import mainfrom ..models import Userfrom flask import abort, render_template@main.route('/user/
')def user(username): #数据库存在该用户返回用户页面, 不存在返回404 user = User.query.filter_by(username=username).first() if not user: abort(404) return render_template('user.html', user=user)

四. 增加user.html页面——app/templates/user.html

{% extends 'base.html' %}{% block title %}Flask - {
{ user.username }}{% endblock %}{% block page_content %}
{% endblock %}

五. 修改base.html——在导航条上添加个人页面链接

{% if current_user.is_authenticated() %}     #只有在用户登录以后, 导航栏才显示该连接, 防止匿名用户访问该连接
  • Profile
  • {% endif %}

    用户可以分享自己页面的url给别人浏览, 也可以登录自己的账号, 然后点击Profile链接浏览自己的页面;

    六. 效果演示

    我们首先注册一个用户john:

    注意我们提供的email无效, 所以无法完成验证, 为了跳过请求前重定向到unconfirmed, 我们把confirm字段改为1, 登录用户:

    点击提交按钮后, auth.login视图函数返回重定向main.index, 在处理main.index 请求之前先执行before_app_request钩子函数, 把john的last_seen字段修改为当前时间, 然后处理main.index请求, 返回主页index.html, 由于此时用户已经登录, 于是导航栏显示Profile链接:

    点击链接, 返回用户页面user.html, 显示用户信息:

    你可能感兴趣的文章
    聊聊gcc参数中的-I, -L和-l
    查看>>
    [C++基础]034_C++模板编程里的主版本模板类、全特化、偏特化(C++ Type Traits)
    查看>>
    C语言内存检测
    查看>>
    Linux epoll模型
    查看>>
    Linux select TCP并发服务器与客户端编程
    查看>>
    Linux系统编程——线程池
    查看>>
    基于Visual C++2013拆解世界五百强面试题--题5-自己实现strstr
    查看>>
    Linux 线程信号量同步
    查看>>
    C++静态成员函数访问非静态成员的几种方法
    查看>>
    类中的静态成员函数访问非静态成员变量
    查看>>
    C++学习之普通函数指针与成员函数指针
    查看>>
    C++的静态成员函数指针
    查看>>
    Linux系统编程——线程池
    查看>>
    yfan.qiu linux硬链接与软链接
    查看>>
    Linux C++线程池实例
    查看>>
    shared_ptr简介以及常见问题
    查看>>
    c++11 你需要知道这些就够了
    查看>>
    c++11 你需要知道这些就够了
    查看>>
    shared_ptr的一些尴尬
    查看>>
    C++总结8——shared_ptr和weak_ptr智能指针
    查看>>